From 2313bf488f08376a727903de03b1090fd1ee81bf Mon Sep 17 00:00:00 2001 From: "awilliam@xenbuild.aw" Date: Mon, 2 Oct 2006 21:27:49 -0600 Subject: [PATCH] [IA64] Bind event channels of VT-i domain to vcpu 0 Signed-off-by: Tsunehisa Doi --- xen/arch/ia64/vmx/vmx_process.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/xen/arch/ia64/vmx/vmx_process.c b/xen/arch/ia64/vmx/vmx_process.c index 71c41cca33..b1b9667444 100644 --- a/xen/arch/ia64/vmx/vmx_process.c +++ b/xen/arch/ia64/vmx/vmx_process.c @@ -198,7 +198,7 @@ void leave_hypervisor_tail(struct pt_regs *regs) { struct domain *d = current->domain; struct vcpu *v = current; - int callback_irq; + // FIXME: Will this work properly if doing an RFI??? if (!is_idle_domain(d) ) { // always comes from guest // struct pt_regs *user_regs = vcpu_regs(current); @@ -226,11 +226,14 @@ void leave_hypervisor_tail(struct pt_regs *regs) // v->arch.irq_new_pending = 1; // } - callback_irq = d->arch.hvm_domain.params[HVM_PARAM_CALLBACK_IRQ]; - if (callback_irq != 0 && local_events_need_delivery()) { - /*inject para-device call back irq*/ - v->vcpu_info->evtchn_upcall_mask = 1; - vmx_vcpu_pend_interrupt(v, callback_irq); + if (v->vcpu_id == 0) { + int callback_irq = + d->arch.hvm_domain.params[HVM_PARAM_CALLBACK_IRQ]; + if (callback_irq != 0 && local_events_need_delivery()) { + /*inject para-device call back irq*/ + v->vcpu_info->evtchn_upcall_mask = 1; + vmx_vcpu_pend_interrupt(v, callback_irq); + } } if ( v->arch.irq_new_pending ) { -- 2.30.2